MicrowaveSys-Ex Description(c) Waldorf Electronics
Page #1






MICROWAVE SYS-EX FORMAT

Nov. 29, 1993

Software Version 1.00, Release 1.01






-----------------------------------------------------------------------


This documenmt is prepared under great caution
in a most precise manner.

Several experts took care in sorting and checking
the available information the best way possible.


However, we cannot guarantee that all information is
absolutely correct,
nor can we guarantee that there won't be changes 
due to further software enhancements.


General info:

Sys-Ex dumps and requests will always be in the following format:

F0h IDW DEV IDM --------data--------- CHKSUM F7h

where

h         : Hex
IDW       : Waldorf MIDI ID = 3Eh
IDE       : Equipment ID = 00h for MicroWave
DEV       : Device number, 00h to 7Eh, 7Fh = global
IDM       : Message ID
Data      : whatever data bytes, 00h to 7Fh
CHKSUM    : Sum of all databytes truncated to 7 bits.
            The addition is done in 8 bit format, the result is    
            masked to 7 bits (00h to 7Fh).
            IMPORTANT: the MIDI status-bytes as well as the 
            ID's are not used for computing the checksum.
            If there are no data-bytes in the message (simple      
            request), the checksum will always be 00h.

To verify a message, all ID's, the checksum, the EOX-status and 
the total lenght of the message are used.

An unknown message will lead to no reaction; it will be ignored 
completely.

There is no provision for implementing a handshake protocol.
Upon sending a request the transmitter of the request must not 
wait explicitely for a dump since there is no error message issued 
if a transmission error occurs.
The transmitter of a request must be prepared to recieve a dump at 
any time. Just exactely when the dump will be sent is dependent on 
the current CPU-state of the system.

A Sys-Ex message must always be terminated by an EOX (7Fh). In 
case it is not, the Sys-Ex message will either be regarded as 
uncomplete or ignored. The following status-byte then won't be 
recognized.

In all dumps there may be unused data-bytes. Those data-bytes 
represent reserved, but yet unused parameters. It is advised to 
administer those parameters in all applications, but without 
displaying them to the user.
This means, that for instance a single sound-dump contains 180 
data-bytes of which only around 160 are used. In an editor- or 
librarian-program the unused bytes should be recognized and 
administered at any operation, since those data may become valid 
parameters in future MicroWave software releases.
Besides that, even though the values of those data-bytes are 
currently unimportant, zeros should be used.


Data formats:

If not indicated differently, a databyte consists of a regular 
MIDI-databyte. (00h..7Fh).

Otherwise:

ASCII: A MIDI databyte in the range of 20h..7Fh.
BYTE : Two consecutive nibbles form an 8-bit byte.
       The MS nibble is sent first.
WORD : Four consecutive nibbles form a 16-bit word.
       The MS nibble is sent first.

No other data formats will be provided.
Within a single message data formats may be mixed.


Detailed information:

The diference between dumps and requests is determined by a high 
or low bit 6. This means: requests occupy IDM-numbers 00h to 3Fh, 
while the corresponding dumps have IDM-numbers 40h to 7Fh.
As you can see, a dump always has the same IDM-number as it's 
request, the difference being a high (set) bit 6.

IDM Mnemonic/Funktion             IDM Mnemonic/Funktion
   
------------------------------------------------------------------
00  VERR Version Number Request   40  VERD Version Number and Date 
                                           Dump
01  DEVR Device Status Request    41  DEVD Device Status Dump
02  BPRR BPR Dump Request         42  BPRD BPR Dump
    (BPR = Basic Program)
03  ARPR ARR Dump Request         43  ARPR Arrangement Dump 
                                           (without BPRs)
04  WAVR Wave Dump Request        44  WAVD Wave Dump
                                           (withoutWaveControlTbl)
05  WCOR Wave Steuertab. Request  45  WCOD Wave Steuertab. Dump
06  TUNR Tuning Table Dump Req.   46  TUND Tuning Table Dump
07  VELR Velocity Table Dump Req. 47  VELD Velocity Table Dump
08  BPCR BPR Change Map Dump Req. 48  BPCD BPR Change Map Dump
09  APCR ARR Change Map Dump Req. 49  APCD ARR Change Map Dump

0Ah ... 0Fh / 4Ah ... 4Fh  currently unused

10  BPBR BPR Bank Dump Request    50 BPBD BPR Bank Dump
11  ARBR ARR Bank Dump Request    51 ARPD ARR Bank Dump
12  TABR Table Dump Request       52 TABD Table Dump
13  UWVR Userwavetable Request    53 UWVD Userwavetable Dump
14  CRTR Cartridge Dump Req.      54 CRTD Cartridge Dump
15  ARRR ARR Dump Request         55 ARRD Arrangement Dump
                                          (with BPRs)

















Description of messages
-----------------------

VERR
----------------------------------
IDM: 00h  (Version Number Request)

Requests version number and date of the software.

   Byte #   Value
    
        0   F0h (EXC)
        1   IDW
        2   IDE
        3   DEV
        4   IDM
        5   CHKSUM ( 0 )
        6   F7h (EOX)
        

VERD
--------------------------------------
IDM: 40h (Version Number and Date Dump)

Contains version number and date of software. Uses standard 7bit 
ASCII format, no delimiters.
If the MicroWave recieves that message, it won't react. And why 
should it.

  Byte #   Value
   
        0   F0h (EXC)
        1   IDW
        2   IDE
        3   DEV
        4   IDM
    5..14   Ascii Version Number and Date ( VVRRYYMMDD )
            V=Version R=Revision Y=year M=month D=day
       15   CHKSUM
       16   F7h (EOX)
   


DEVR
--------------------------------
IDM: 01h (Device Status Request)

Requests device status dump.

  Byte #   Value
   
        0   F0h (EXC)
        1   IDW 
        2   IDE
        3   DEV
        4   IDM
        5   CHKSUM
        6   F7h (EOX)



DEVD
--------------------------------
IDM: 41h (Device Status Dump)

is sent upon reception of a DEVR.
If a DEVD is recieved, the data it contains become valid.
   
   Byte #   Value
   
        0   F0h (EXC)
        1   IDW
        2   IDE
        3   DEV
        4   IDM
        
        5   Overflow Mode  (off = 0, on = 1)
        6   Midi Out=Thru  (0=off, 1=on, if Overflow = off)
        7   Device Number  (0...126)
            Device Number 127 must never be sent !            

        8   CHKSUM
        9   F7h (EOX)
        


BPRR
-----------------------------
IDM: 02h (Sound Dump Request)         

Requests a dump of the active sound program.
If a certain sound program shall be dumped, you must first sent 
the according program-change command (C0h PRG#).

This request is only useful in Single-mode, since in Multi-mode a 
program change command might either call a different sound for an 
Instrument or a different Multi-program, depending on a parameter 
(PC-mode) of each Multi-program. Besides, the active sound program 
is always that of the last Instrument selected. Therefore it is 
unpredictable, which sound-data will be sent by a MicroWave set to 
Multi-mode.

Therefore you must switch the MicroWave to Single (MIDI-Poly)-mode 
before requesting a sound dump.

   Byte #  Value
       
      0    F0h (EXC)
      1    IDW
      2    IDE
      3    DEV
      4    IDM
      5    CHKSUM (0)
      6    F7h (EOX)
      


BPRD
---------------------
IDM: 42h (Sound Dump)

After recieving a BPRR the MicroWave will sent the data of the 
active sound-program. If this sound resides in one of the eight 
edit buffers, the data of the edited version will be sent.

When recieving a sound-dump, the MicroWave first checks if the 
currently active sound resides in an edit buffer. In that case the 
sound-program will be dumped to the very same edit buffer.
If the currently active sound does not reside in an edit buffer, 
the sound-program will ALWAYS be dumped to the first edit buffer; 
at the same time an auto-edit procedure will be executed. That 
means that the original sound at the active memory location 
remains unaltered, even though the recieved sound-dump will be 
connected directly to the sound-generation process.
Under all circumstances a sound-dump is ALWAYS just temporary, 
meaning it only resides in an edit buffer but not in internal- or 
card-memory. If the recieved sound-dump shall be saved 
permanently, you must do it by hand at the front panel.
Otherwise the sound-dump will be erased after powering down or 
even after recieving the following sound-dump.
       
   Byte #   Value
      
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM
      
            Data:
      5     Osc 1 Octave (0=-2, 10h=-1, 20h=0, 30h=+1, 40h=+2)
      6     Osc 1 Semitone (0...120, 1 Semitone equals a value     
                            of 8)
      7     Osc 1 Detune (0...127, equals Detune -64...+63 )
      8     Osc 1 Bend Range (0...12 Semitones)
      9     Osc 1 Pitch Mode (0=normal, 1=fixed)
     10     Osc 1 Modifier 1 Source (0...22, see Modifier Table)
     11     Osc 1 Modifier 1 Control (0...22,  "      "      " )  
     12     Osc 1 Modifier 1 Amount (0...127, equals -64...+63)
     13     Osc 1 Modifier 2 Source (0...15, see Modifier Table)
     14     Osc 1 Modifier 2 Amount (0...127, equals 64...+63)
     15     Osc 1 Modifier 2 Quantize (0...7)
     16     Osc 2 Octave
     17     Osc 2 Semitone
     18     Osc 2 Detune
     19     Osc 2 Bend Range
     20     Osc 2 Pitch Mode
     21     Osc 2 Modifier 1 Source
     22     Osc 2 Modifier 1 Control
     23     Osc 2 Modifier 1 Amount
     24     Osc 2 Modifier 2 Source
     25     Osc 2 Modifier 2 Amount
     26     Osc 2 Modifier 2 Quantize
     27     Osc 2 Link Mode (0 = off, 1 = on, ON takes over all    
                             modifier values of OSC 1)             
     28     Wave 1 & 2 Wavetable (0...31[56])
     29     Wave 1 Waveposition (0...63)
     30     Wave 1 Wavestart (0...127, 0 equals free running)
     31     Wave 1 Envelope Amount (0...127, equals -64...+63)
     32     Wave 1 Envelope Velocity (0...127, equals -64...+63)
     33     Wave 1 Keytrack Amount (0...127, equals -64...+63)
     34     Wave 1 Modifier 1 Source  (0...22, see Modifier Table)
     35     Wave 1 Modifier 1 Control (0...22,   "      "    "   )
     36     Wave 1 Modifier 1 Amount (0...127, equals -64...+63)
     37     Wave 1 Modifier 2 Source (0...15, see Modifier Table)
     38     Wave 1 Modifier 2 Amount (0...127, equals -64...+63)
     39     Wave 1 Mode (0=stepped, 1=smooth)
     40     --------unused----------
     41     Wave 2 Waveposition
     42     Wave 2 Wavestart
     43     Wave 2 Envelope Amount
     44     Wave 2 Envelope Velocity
     45     Wave 2 Keytrack Amount
     46     Wave 2 Modifier 1 Source
     47     Wave 2 Modifier 1 Control
     48     Wave 2 Modifier 1 Amount
     49     Wave 2 Modifier 2 Source
     50     Wave 2 Modifier 2 Amount
     51     Wave 2 Mode
     52     Wave 2 Link Mode (0 = off, 1 = on, ON takes over all
                              Modifier values of Wave 1)
     53     Wave 1 Volume (0...112, in steps of 16, => 0...7)
     54     Wave 2 Volume (0...112), s.o.
     55     Noise Volume  (0...112), s.o.
     56     Sound Volume  (0...127)
     57     Volume Envelope Amount (0...127, equals -64...+63)
     58     Volume Envelope Velocity (0...127, equals -64...+63)
     59     Volume Keytrack Amount (0...127, equals -64...+63)
     60     Volume Modifier 1 Source  (0...22, see Modifier Table)
     61     Volume Modifier 1 Control (0...22,   "      "    "   )
     62     Volume Modifier 1 Amount  (0...127, equals -64...+63)
     63     Volume Modifier 2 Source  (0...22, see Modifier Table)
     64     Volume Modifier 2 Amount  (0...127, equals -64...+63)
     65     Filter Cutoff Frequency   (0...127)
     66     Filter Resonance (Q)      (0...127)
     67     Cutoff Envelope Amount    (0...127, equals -64...+63)
     68     Cutoff Envelope Velocity  (0...127, equals -64...+63)
     69     Cutoff Keytrack Amount    (0...127, equals -64...+63)
     70     Cutoff Modifier 1 Source  (0...22, see Modifier Table)
     71     Cutoff Modifier 1 Control (0...22,   "      "    "   )
     72     Cutoff Modifier 1 Amount  (0...127, equals -64...+63)
     73     Cutoff Modifier 2 Source  (0...22, see Modifier Table)
     74     Cutoff Modifier 2 Amount  (0...127, equals -64...+63)
     75     Reson. Modifier 1 Source  (0...22, see Modifier Table)
     76     Reson. Modifier 1 Amount  (0...127, equals -64...+63)
     77     Vol Envel Attack Time     (0...127)
     78     Vol Envel Decay Time      (0...127)
     79     Vol Envel Sustain Level   (0...127)
     80     Vol Envel Release Time    (0...127)
     81     Vol Envel Attack Modifier Source (0...22, see Modifier 
                                              Table)
     82     Vol Envel Attack Modifier Amount (0...127, equals      
                                              -64...+63)
     83     Vol Envel Decay Modifier Source (0...22, see Modifier  
                                             Table)
     84     Vol Envel Decay Modifier Amount (0...127, equals       
                                             -64...+63)
     85     Vol Envel Sustain Modif. Source (0...22, see Modifier  
                                             Table)
     86     Vol Envel Sustain Modif. Amount (0...127, equals       
                                             -64...+63)
     87     Vol Envel Release Modif. Source (0...22, see Modifier  
                                             Table)
     88     Vol Envel Release Modif. Amount (0...127, equals       
                                             -64...+63)
     89     ----------unused---------
     90     Fltr Envel Delay Time     (0...127)
     91     Fltr Envel Attack Time    (0...127)
     92     Fltr Envel Decay Time     (0...127)
     93     Fltr Envel Sustain Level  (0...127)
     94     Fltr Envel Release Time   (0...127)
     95     Fltr Envel Delay Modif. Source  (0...22, see Modifier  
                                             Table)
     96     Fltr Envel Delay Modif. Amount  (0...127, equals 
                                             -64...+63)
     97     Fltr Envel Attack Modif. Source (0...22, see modifier 
                                             Table)
     98     Fltr Envel Attack Modif. Amount (0...127, equals 
                                             -64...+63)
     99     Fltr Envel Decay Modif. Source  (0...22, see modifier 
                                             Table)
    100     Fltr Envel Decay Modif. Amount  (0...127, equals 
                                             -64...+63)
    101     Fltr Envel Sustain Modif. Source (0...22, see modifIer 
                                              Table)
    102     Fltr Envel Sustain Modif. Amount (0...127, equals 
                                              -64...+63)
    103     Fltr Envel Release Modif. Source (0...22, see modifIer 
                                              Table)
    104     Fltr Envel Release Modif. Amount (0...127, equals 
                                              -64...+63)
    105     ----------unused-----------
    106     Wav Envel Time 1         (0...127)
    107     Wav Envel Level 1        (0...127)
    108     Wav Envel Time 2         (0...127)
    109     Wav Envel Level 2        (0...127)
    110     Wav Envel Time 3         (0...127)
    111     Wav Envel Level 3        (0...127)
    112     Wav Envel Time 4         (0...127)
    113     Wav Envel Level 4        (0...127)
    114     Wav Envel Time 5         (0...127)
    115     Wav Envel Level 5        (0...127)
    116     Wav Envel Time 6         (0...127)
    117     Wav Envel Level 6        (0...127)
    118     Wav Envel Time 7         (0...127)
    119     Wav Envel Level 7        (0...127)
    120     Wav Envel Time 8         (0...127)
    121     Wav Envel Level 8        (0...127)
    122     Wav Envel Time Modifier Source (0...22, see modifier   
                                            table)
    123     Wav Envel Time Modifier Amount (0...127, equals 
                                            -64...+63)
    124     Wav Envel Level Modifier Source (0...22, see modifier 
                                             Table)
    125     Wav Envel Level Modifier Amount (0...127, equals 
                                             -64...+63)
    126     Wav Envel Key Off Point (0...7)
    127     Wav Envel Loop Start Point (0...7)
    128     Wav Envel Loop Mode (0 = off, 1 = on)
    129     LFO 1 Rate               (0...127)
    130     LFO 1 Shape   (0=sin, 1=saw, 2=pulse, 3=random)
    131     LFO 1 Symmetrie (0...127, equals -64...+63)
    132     LFO 1 Humanize  (0...4, 0 = off)
    133     LFO 1 Rate Modifier Source (0...22, see modifier       
                                        table)
    134     LFO 1 Rate Modifier Amount (0...127, equals -64...+63)
    135     LFO 1 Level Modifier Source (0...22, see modifier      
                                         table)
    136     LFO 1 Sync (0 = off, 1 = on)
    137     LFO 1 Delay (0...127, 0=off, 1=retrigger 
                                         2...127=delay&retrig)
    138     LFO 1 Attack (0...127)
    139     LFO 1 Decay  (0...127, 0=off)
    140     LFO 2 Rate   (0...127)
    141     LFO 2 Shape  (0=sin, 1=saw, 2=pulse, 3=random)
    142     LFO 2 Symmetrie (0...127, equals -64...+63)
    143     LFO 2 Humanize (0...4, 0=off)
    144     -----------unused-----------
    145     -----------unused-----------
    146     Panning (0...127, equals L64...M00...R63)
    147     Pan Modifier Source (0...22, see modifier table)
    148     Pan Modifier Amount (0...127, equals -64...+63)
    149     Glide (0...4, 0=off, 1=Glissando, 2=Portamento,
                          3=Midi Glissando, 4=Midi Portamento)
    150     Glide Rate (0...127)
    151     Glide Mode (0 = equal Time, 1= equal Distance)
    152     Tuning Table (0...7, 0=pos, 1=neg, 2=slightly detune,
                          3=honky tonk, 4...7 = User Tables 1...4)
    153-168 Sound Name (16 Digits ASCII from 20h to 7fh,
                        7bit, no terminator)
    169-183 ----------unused-------------
    184     Valid Flag (always 55h,otherwise the sound is invalid)
    185     CHKSUM over Bytes 5...184
    186     F7h (EOX)
   
            Modifier Table:   0= LFO 1, 
                              1= LFO 2, 
                              2= Vol. Envelope,
                              3= Fltr Envelope,
                              4= Wave Envelope,
                              5= LFO1 Envelope,
                              6= Keytrack,
                              7= Velocity,
                              8= Rel. Velocity,
                              9= Aftertouch,
                             10= Poly Pressure,
                             11= Pitch Bender,
                             12= Modulation Wheel
                             13= Sustain Pedal,
                             14= Volume Controller
                             15= Panning Controller,
                             16= Breath Contr.
                             17= Controller W,
                             18= Controller X,
                             19= Controller Y,
                             20= Controller Z
                             21= Maximum(fixed),
                             22= Minimum(fixed)
                              
ARPR
------------------------------------------
IDM: 03h (Arrangement Program Dump Request)         

Requests a dump of the active Arrangement program (Multi-program).

If the MicroWave is set to Single (Poly) mode, the request will be 
ignored.

If the MicroWave is set to Multi-mode, it will issue a dump of the 
active Multi-program, but without the corresponding 
Sound-programs.
If you require a specific Multi-program to be dumped, you must 
select this Multi-program at the MicroWave itself. Simply sending 
a MIDI program change command might not lead to the expected 
result, since it might be applied to one or more Instruments to 
change their Sound-programs rather than switching the 
Multi-program itself. 

   Byte #  Value
       
      0    F0h (EXC)
      1    IDW
      2    IDE
      3    DEV
      4    IDM
      5    CHKSUM (0)
      6    F7h (EOX)
      

ARPD
------------------------------------
IDM: 43h (Arrangement Program Dump)

Will be issued if the according request (ARPR) has been recieved 
and Multi-mode is currently selected.

If the MicroWave recieves an ARPD, it first checks if Multi-mode 
is active; otherwise it will ignore the dump. If Multi-mode is 
active, the dump will be directed to the Arrangement edit buffer, 
even if the active Multi-program does not already reside there. It 
also will be directly connected to the sound-generating process.

Be aware that all data must be useful, even and esspecially that 
of yet unused Instruments. Otherwise a later change of the 
Multi-program might lead to system crashes.

   Byte #  Value
       
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM

      Data:

         Multi Programm Master Parameters:

      5     Master Volume of Arrangement (0...127)
      6     Midi Controller W (0...120)
      7     Midi Controller X (0...120)
      8     Midi Controller Y (0...120)
      9     Midi Controller Z (0...120)
     10     Program Change Mode (0..2)
             (0=Multi Prg Change, 1=Sound Prg Change, 2=combined)
     11     Instrument Count (0...7), amount of Instruments
                                      for this specific Programm.
     12     ----------unused------------
     13     ----------unused------------
     14     Valid Flag (always 55h, otherwise the Programm is      
                        invalid)
   15...30  Multi Programm Name, 16 Digits Ascii 7 Bit             
                                 (20h...7fh), no terminator.
            

         Multi Programm Instrument #1 Parameters:

     31     Instr. enable (0 = off, 1 = on)
     32     Instr. Midi Channel (0...15 = Midi channel 1...16)
     33     Instr. Sound (BPR) (0...127 = Soundprog. A01...D32)
     34     Instr. Key Limit Low (0...127)
     35     Instr. Key Limit High (0...127)
     36     Instr. Velocity Limit Low (1...127)
     37     Instr. Velocity Limit High (1...127)
     38     Instr. Velocity Curve (0...9)
               (0=lin. pos, 1=lin. neg., 2=exp. pos., 3=exp. neg.,
                4=crossfade pos., 5=crossfade neg., 
                6...9=usertable 1...4)
     39     Instr. Transpose Offset (0...48, equals -24...0...+24)
     40     Instr. Detune (0...127, equals -64...0...+63)
     41     Instr. Tuning Table 
                   (0...7, 0 = pos, 1 = neg, 2 = slightly detune,
                    3 = honky tonk, 4...7 = Usertables)
     42     Instr. Volume (0...127)
     43     Instr. Panning (0...127, equals L64...M00...R63)
     44     Instr. Panning Mod On/Off (0 = off, 1 = On)
     45     Instr. Routing (0...4, 0 = L+R, 1...4 = Out 1...4)
     46     Instr. Program Change Filter (0=disable, 1=enable)
     47     Instr. Pitch Wheel Filter
     48     Instr. Modulation Wheel Filter 
     49     Instr. Aftertouch Filter
     50     Instr. Poly Pressure Filter
     51     Instr. Volume Controller Filter
     52     Instr. Panning Controller Filter
     53     Instr. Sustain Pedal Filter
     54     -------unused---------
     55     -------unused---------
     
   56...80  Instrument #2 Data
   81...105 Instrument #3 Data
  106...130 Instrument #4 Data
  131...155 Instruemnt #5 Data
  156...180 Instrument #6 Data
  181...205 Instrument #7 Data
  206...230 Instrument #8 Data
  
    231     Checksum over Data Bytes 5...230
    232     EOX (F7h)


      
WAVR
----------------------------------------
IDM: 04h (Wave Dump Request)

Requests a dump of a Wave without Wave Control table
(a Wave is part of a Wavetable. Each Wavetable may consist of up 
to 61 different Waves plus saw, square and triangle waveform).

   Byte #   Value
      
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM
      
     Data:

     5..8   Request Wave Number (0...505), where
            Waves    0...245 are Rom-Waves,
                   246...306 are internal Userwaves,
                   307...367 are Card-Waves,
                   368...505 are reserved Rom-Waves (yet invalid) 
            Format: WORD
            
      9     Checksum ber Datenbytes 5...8
     10     EOX (F7h)
     


WAVD
---------------------------------------------
IDM: 44h (Wave Dump)

Will be sent after a WAVR request has been recieved, if the 
wavenumber is not greater than 505.

When recieving a Wave dump, wavenumbers 0..245 and 368..505 will 
be ignored, since those Waves are not editable. Other valid Waves 
will be dumped to the slot ot their corresponding number. Already 
existing Waves will be erased and replaced.
If the Wave is directed to the card, you better have inserted a 
card; otherwise your data will pollute byte-heaven.
   
   Byte #   Value
   
      
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM

      Data:

      5.....8  Wave Number 246...367 im Format WORD
      9...136  Wave Samples 0...63 im Format BYTE
   
    137     Checksum over Bytes 5...136
    138     EOX (F7h)
WCOR
------------------------------------------
IDM: 05h (Wave Control Table Dump Request)

Requests a dump of a Wave Control table.

Control tables 28..31 cannot be requested since they are generated 
arithmetically; also, they do not contain dumpable Waves.

Tables   00..27 are ROM tables,
         28..31 arithmetically generated,
         32..43 internal user RAM tables,
         44..55 Card-RAM tables,
         56..87 ROM tables (currently invalid)
   
   Byte #   Value
            
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM
      
            Data:
      5     Control Table # (0...27, 32...87)
      6     CHKSUM (=Byte 5)
      7     EOX (F7h)
      
WCOD
------------------------------------------------
IDM: 45h (Wave Control Table Dump)

Will be issued if a WCOR request has been recieved that did not 
request tables 28..31.

When recieving a WCOD Wavetables 00..31 and 56..87 will be ignored 
since they are not editable. Tables 32..55 will be directed to a 
RAM-slot corresponding to their number (44..55 reside on 
cartridge). Already existing tables will be erased and replaced.

   Byte #   Value
   
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM
      
            Data:
      5       Control Table #  (32...55)
      6..261  61 Wavenumbers (0...505, -1) in Format WORD
              If the wavenumber equals -1, this waveposition will  
              be interpolated between the previous and following   
              defined position.

              Tablepositions 61,62,63 must stay undefined (-1).
              Tablepositions 0 and 60 must be defined with a      
              valid Wave.      
     262    CHKSUM over Bytes 5...261
     263    EOX (F7h)

About creating a wavetable-editor:
----------------------------------

In order to write your own Wavetable-editor you must know a bit 
about the structure of a MicroWave Wavetable.

A Wavetable can be thought of as beeing created by two different 
entities:

 1. The 64 Waves of a Wavetable

The Waves contain the actual sound-information, the spectrum that 
shall be played by the MicroWaves oscillators.

 2. The Wave-Controltable

The Controltable governs how the Waves are ordered. It takes, so 
to say, the administrative part of off the Waves.

Therefore, in order to make your own Wavetables, you must:

1. create certain Waves, sent them to the MicroWave via a WAVD to 
a specific, valid location (slots 246-367).

2. set up a Wave Control Table that incorporates your Waves and 
send it as a WCOD to a valid location to the MicroWave.

Creating Waves:

You must create 64 Bytes of sample-data per Wave. This sample data 
will represent the positive cycle of your desired spectrum. 
These bytes may origin from whatever you like, additive synthesis, 
samples, random functions etc. The MicroWave will perform all 
necessary functions to set pitch and create a valid spectrum out 
of your sample-data all by itself. The sample data you must send 
is sent as the data-bytes of the WAVD.

Creating a Wavetable:

The Wavetable is defined by the Wave Control Table. Basically, it 
states to what positions of the Wavetables which Waves must be 
loaded. This way, you could load up to 61 distinct Waves into a 
single Wavetable. Remember. though, the last three positions of a 
Wavetable (61,62,63) are predefined and will always be tri, sqr 
and saw. The numbers of the Waves that shall be loaded to the 
table-positions are sent as the data-bytes of the WCOD.

However, you can specify only 64 Waves yourself, but up to 12 
Wavetables. How do you 'compress' the Wave-data?

You can, but by no means must set a valid Wave-number for each 
table position. Rather, you can specify a couple of positions of 
the Wavetable and leave the others 'free' (by assigning a -1 to 
their corresponding positions). In that case the MicroWave will 
perform some additional magic and fill these positions by 
interpolating between the two adjacent spectra. This means that 
you only must specify the extremes of your Wavetable as Waves, 
send those few Waves to the MicroWave at the correct positions and 
have the MicroWave fill the 'empty' positions by itself. Great, 
isn't it?

However, one thing to remember:

You MUST specify valid Waves for Wavetable-positions 0 and 60. If 
not, your MicroWave will takle a little break...

A Wave Control Table might look something like this:

POS  1   2  3  4  5  6  7  8  9  10 11 12 13 14 15 16  17 .. 59  60
WAV 246 -1 -1 -1 -1 -1 -1 -1 -1 247 -1 -1 -1 -1 -1 -1 248 .. -1 250

Wavetable-positions 61,62 and 63 MUST be set to -1.

You may use internal and cartridge Waves at random, but be aware 
that a card may not be inserted.

        
TUNR
--------------------------------------------
IDM: 06h (Tuning Table Dump Request)

Requests a dump of a user Tuning table.
   
   Byte #   Value
            
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM
      
            Data:
      5     Tuning Table # (0...3)
      6     CHKSUM (=Byte 5)
      7     EOX (F7h)

        


TUND
------------------------------------------------------
IDM: 46h (User Tuning Table Dump)

Will be issued after recieving a TUNR request.

When recieving a Tuning table dump, the table will be stored 
according to it's number.

Already existing tables will be erased and replaced.

Tables 0..1 are internal RAM tables,
       2..3 are Card-RAM tables.


   Byte #   Value
            
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM
      
            Data:
      5       Tuning Table # (0...3)
      6...261 Tablepositions 0...127, first Semitone (0...127),
              followed by De-Tune (0...127, equals -64...0...+63)
     
    262     CHKSUM over Bytes 5...261
    263     EOX (F7h)
    


VELR
---------------------------------------------
IDM: 07h (Velocity Table Dump Request)

Requests a dump of a user Velocity table.
   
   
   Byte #   Value
            
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM
      
            Data:
      5     Velocity Table # (0...3)
      6     CHKSUM (=Byte 5)
      7     EOX (F7h)
 
      
            
VELD
------------------------------------------------------------
IDM: 47h  (User-Velocity Table Dump)

Will be issued after recieving a VELR request.

When recieving a Velocity table dump, the table will be stored 
according to it's number.

Already existing tables will be erased and replaced.

Tables 0..1 are internal RAM tables,
       2..3 are Card-RAM tables.

   
   Byte #   Value
            
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM
      
            Data:
      5       Velocity Table # (0...3)
      6       ---------unused---------
      7...133 Tablepositions 1...127, Velocity 1...127
     
      134   CHKSUM over Bytes 5...133
      135   EOX (F7h)



BPCR
-----------------------------------------------
IDM: 08h (Sound Program Change Map Dump Request)

Requests a dump of the Sound program change map.
   
   
   Byte #   Value
            
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM
      5     CHKSUM (= 0)
      6     EOX (F7h)


BPCD
--------------------------------------------------
IDM: 48h (Sound Program Change Map Dump)

Will be issued after recieving a BPCR request.

   Byte #   Value
            
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM

   5...132  Tablepositions 0...127, Sound Program (BPR)         
               0...127, equals Prog. A01...D32
     
    133     CHKSUM over Bytes 5...132
    134     EOX (F7h)



APCR
--------------------------------------------------
IDM: 09h (Multi Program Change Map Dump Request)

Requests a dump of a Multi program change map.

   
   Byte #   Value
            
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM
      5     CHKSUM (= 0)
      6     EOX (F7h)
     


APCD
---------------------------------------------------
IDM: 49h (Multi Program Change Map Dump)

Will be issued after recieving a APCR request.

   Byte #   Value
            
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM

   5...132  Tablepositions 0...127, Multi Program (ARR)         
            0...127, equals Prog. A01...D32
     
    133     CHKSUM over Bytes 5...132
    134     EOX (F7h)



BPBR
------------------------------------------------------
IDM: 10h (Sound Program (BPR) Bank Dump Request)
   
Requests the entire contents of the internal Sound-program RAM.


   Byte #   Value
            
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM
      5     CHKSUM (= 0)
      6     EOX (F7h)


BPBD
-----------------------------------------------------
IDM: 50h (Sound Program (BPR) Bank Dump)

Will be issued when a BPBR request has been recieved.

When a BPBD is arriving, all internal Sound-programs will be 
erased and replaced by the dump.

ALL OLD SOUND-DATA WILL BE LOST! PERIOD!

The validity-check takes place WHILE storing the incomming data. 
If an error is detected, it will be shown on the display. In this 
case you MUST send a BPBD again, since the data in the 
Sound-program memory is most likely useless.


   Byte #   Value
            
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM

            Data: (64 * 180 Bytes)
   5...184  Sound Program (BPR) A01 as explained under BPRD
 185...364  Sound Program (BPR) A02
 365..11524 Sound Program (BPR) A03...B32

  11525     CHKSUM over Bytes 5...11524
  11526     EOX (F7h)
   



ARBR
---------------------------------------------------
IDM: 11h (Multi Program (ARR) Bank Dump Request)

Requests the entire contents of the internal Multi-program RAM.
   
   
   Byte #   Value
            
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM
      5     CHKSUM (= 0)
      6     EOX (F7h)

   

ARBD
--------------------------------------------------
IDM: 51h (Multi Program (ARR) Bank Dump)
   
Will be issued when a ARBR request has been recieved.

When a ARBD is arriving, all internal Multi-programs will be 
erased and replaced by the dump.

ALL OLD MULTI-PROGRAM-DATA WILL BE LOST! PERIOD!

The validity-check takes place WHILE storing the incomming data. 
If an error is detected, it will be shown on the display. In this 
case you MUST send a ARBD again, since the data in the 
Multi-program memory is most likely useless.


   Byte #   Value
            
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM

            Data: (64 * 226 Bytes)
   5...230  Multi Program (ARR) A01 as explained under ARPD
 231...456  Multi Program (ARR) A02
 457..14468 Multi Program (ARR) A03...B32

  14469     CHKSUM over Bytes 5...14468
  14470     EOX (F7h)



TABR
------------------------------------------------
IDM: 12h (User Table Dump Request)

Requests a dump of all tables and maps in internal RAM.

Those are:  user-tuningtable 1,
            user-tuningtable 2,
            user-velocitytable 1,
            user-velocitytable 2,
            Sound program change map,
            Multi program change map
   
  
   Byte #   Value
            
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM
      5     CHKSUM (= 0)
      6     EOX (F7h)


TABD
-----------------------------------------------------
IDM: 52h (User Table Dump)

Will be issued when a TABR request has been recieved.

When a TABD is arriving, all internal tables/maps will be erased 
and replaced by the dump.

ALL OLD TABLE/MAP-DATA WILL BE LOST! PERIOD!

The validity-check takes place WHILE storing the incomming data. 
If an error is detected, it will be shown on the display. In this 
case you MUST send a TABD again, since the data in the 
table/map-memory is most likely useless.

   
   Byte #   Value
            
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM

            Data:
   5...260  User Tuning Tabelle 1 as explained under TUND
 261...516  User Tuning Tabelle 2 
 517...644  User Velocity Tabelle 1 as explained under VELD
 645...772  User Velocity Tabelle 2
 773...900  Sound Program Change Map as explained under BPCD
 901..1028  Multi Program Change Map as explained under APCD
 
   1029     CHKSUM over Bytes 5...1028
   1030     EOX (F7h)
UWVR
------------------------------------------------
IDM: 13h (User Wavetable and Waves Request)

Requests a dump of all user-wavetables (Wave Control tables) and 
Waves residing in internal RAM.


   Byte #   Value
            
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM
      5     CHKSUM (= 0)
      6     EOX (F7h)
   


UWVD
-------------------------------------------------------
IDM: 53h (Userwavetable and Waves Dump)

Will be issued when a UWVR request has been recieved.

When a UWVD is arriving, all internal user-wavetables and Waves 
will be erased and replaced by the dump.

ALL OLD USER-WAVETABLE/WAVE-DATA WILL BE LOST! PERIOD!

The validity-check takes place WHILE storing the incomming data. 
If an error is detected, it will be shown on the display. In this 
case you MUST send a UWVD again, since the data in the 
user-wavetable/Wave memory is most likely useless.

   
   Byte #   Value
            
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM

            Data:
   5...260  Userwavetable 1 (Wavetable 33) in Format WORD
            as explained under WCOD
  261..516  Userwavetable 2 (Wavetable 34) in Format WORD
  517..3076 Userwavetables 3...11 (Wavetables 35...46) 
            in Format WORD
   
 3077..3204 Userwave 1 (Wave 246) in Format BYTE
            as explained under WAVD
 3205..3332 Userwave 2 (Wave 247) in Format BYTE
 3333.10884 Userwave 3...61 (Waves 248..306) in Format BYTE
 
   10885    CHKSUM over Bytes 5...10884
   10886    EOX (F7h)

CRTR
------------------------------------------------------
IDM: 14h (Cartridge Dump Request)

Requests a dump of ALL data in internal RAM.
   
   
   Byte #   Value
            
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM
      5     CHKSUM (= 0)
      6     EOX (F7h)



CRTD
------------------------------------------------------
IDM: 54h (Cartridge Dump)

Will be issued when a CRTR request has been recieved.

When a CRTD is arriving, ALL INTERNAL MEMORY  will be erased and 
replaced by the dump.

ALL OLD DATA WILL BE LOST! PERIOD!

The validity-check takes place WHILE storing the incomming data. 
If an error is detected, it will be shown on the display. In this 
case you MUST send a CRTD again, since the data in internal memory 
is most likely useless. This may cause a system-crash within a 
short period of time.

This dump should be treated with utmost respect.

   
   Byte #    Value
            
      0      F0h (EXC)
      1      IDW
      2      IDE
      3      DEV
      4      IDM

             Data:
  5...11524  Sound Programs (BPRs) 0...63 (A01...B32), see BPRD
 11525.25988 Multi Programs (ARRs) 0...63 (A01...B32), see ARPD
 25989.26500 User Tuning Tabels 1 u. 2, see TUND
 26501.26756 User Velocity Tabels 1 u. 2, see VELD
 26757.26884 Sound Program Change Map, see BPCD
 26885.27012 Multi Program Change Map, see APCD
   27013     Master Volume (0...127)
   27014     Stereowidth   (0(mono)...127(full))
   27015     Master Tuning (0...127, equals -64...0...+63)
   27016     Midi Base Channel (0 = omni, 
                                1...16 = Midi channel 1...16)
 27017.27020 Midi Controller W...Z in Poly Mode, (0...120)
 27021.27028 Midi Filters in Poly Mode, (0=off, 1=on)
   27029     Program Patch Maps On/Off  (0=off, 1=on)
   27030     PC Shutdown On/Off, (0=off, 1=on)
 27031.27076 -----------unused----------------
 27077.27079 Device Parameters, see DEVD
 27080.27140 -----------unused-----------
 27141.30212 User Wave Control Tables 1...12 in Format WORD, 
             see WCOD
 30213.38020 User Waves 1...62 in Format BYTE, see WAVD

   38021    CHKSUM over Bytes 5...38020
   38022    EOX (F7h)



ARRR
-----------------------------------------------
IDM: 15h (Arrangement Dump Request)

Requests a dump of the active Arrangement (Multi-program) 
including the according Sound-programs.
   
   
   Byte #   Value
            
      0     F0h (EXC)
      1     IDW
      2     IDE
      3     DEV
      4     IDM
      5     CHKSUM (= 0)
      6     EOX (F7h)



ARRD
---------------------------------------------------
IDM: 55h (Arrangement Dump)

Will be issued after a ARRR has been recieved and if Multi-mode is 
active.

When recieving an ARRD first all editbuffers will be cleared. Then 
the recieved Multi-program is directed to the Multi-program edit 
buffer, the according Sound-programs to the Soundprogram-edit 
buffer. The dumped Multi-program will become the active 
Multi-program and play the dumped Sound-programs.

All data of the edit buffers will be lost.

The validity-check takes place WHILE storing the incomming data. 
If an error is detected, it will be shown on the display. In this 
case you MUST send a ARRD again, since the data in internal memory 
is most likely useless. Especially an error in the Multi-program 
might lead to system-errors.

The lenght of a dump will be different and is dependent on the 
number of Instruments defined in the Multi-program. For each 
defined Instrument the according Sound-program will be sent, even 
if the very same Sound-program has been sent before for another 
Instrument. It is the recievers obligation to check for 
multiple-sent Sound-programs. The MicroWave will accept 
multiple-sent Soundprograms only once and ignore doubles, since a 
Sound-program may reside only once in an edit buffer.

   
   Byte #    Value
            
      0      F0h (EXC)
      1      IDW
      2      IDE
      3      DEV
      4      IDM

             Data:
   5...230   Multiprogramm, see ARPD
   
   231...n   Sound-programs for Instrument 1...8, see BPRD,
             where n = number of Instruments * 180 + 230,
             but at least n = 410, since per Multi-program
             at least one Instrument must be defined.
               
     n+1     CHKSUM over Bytes 5...38274
     n+2     EOX (F7h)


  
-----------------------------------------------------------------

End of System Exclusive Implementation

October 12th, 1989

(c) by Waldorf Electronics, West Germany


